]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
ControlsManagerLayout: Cache workAreaBox
authorIvan Molodetskikh <yalterz@gmail.com>
Sun, 31 Jul 2022 04:59:33 +0000 (21:59 -0700)
committerMarge Bot <marge-bot@gnome.org>
Mon, 1 Aug 2022 00:48:07 +0000 (00:48 +0000)
Allocation runs every frame during the overview animations, so we want
to do as little work there as possible. Cache the work area box
computation.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/2395>

js/ui/overviewControls.js

index 2d58be7bb0f6c74bbb166dce9e860b2086de79e3..01e0da682980a3be03b3be68e13bbd3a8ff03e24 100644 (file)
@@ -45,19 +45,34 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
         this._postAllocationCallbacks = [];
 
         stateAdjustment.connect('notify::value', () => this.layout_changed());
+
+        this._workAreaBox = new Clutter.ActorBox();
+        global.display.connectObject(
+            'workareas-changed', () => this._updateWorkAreaBox(),
+            this);
+        this._updateWorkAreaBox();
     }
 
-    _computeWorkspacesBoxForState(state, box, workAreaBox, searchHeight, dashHeight, thumbnailsHeight) {
+    _updateWorkAreaBox() {
+        const monitor = Main.layoutManager.primaryMonitor;
+        const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index);
+        const startX = workArea.x - monitor.x;
+        const startY = workArea.y - monitor.y;
+        this._workAreaBox.set_origin(startX, startY);
+        this._workAreaBox.set_size(workArea.width, workArea.height);
+    }
+
+    _computeWorkspacesBoxForState(state, box, searchHeight, dashHeight, thumbnailsHeight) {
         const workspaceBox = box.copy();
         const [width, height] = workspaceBox.get_size();
-        const { y1: startY } = workAreaBox;
+        const {y1: startY} = this._workAreaBox;
         const { spacing } = this;
         const { expandFraction } = this._workspacesThumbnails;
 
         switch (state) {
         case ControlsState.HIDDEN:
-            workspaceBox.set_origin(...workAreaBox.get_origin());
-            workspaceBox.set_size(...workAreaBox.get_size());
+            workspaceBox.set_origin(...this._workAreaBox.get_origin());
+            workspaceBox.set_size(...this._workAreaBox.get_size());
             break;
         case ControlsState.WINDOW_PICKER:
             workspaceBox.set_origin(0,
@@ -80,9 +95,9 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
         return workspaceBox;
     }
 
-    _getAppDisplayBoxForState(state, box, workAreaBox, searchHeight, dashHeight, appGridBox) {
+    _getAppDisplayBoxForState(state, box, searchHeight, dashHeight, appGridBox) {
         const [width, height] = box.get_size();
-        const { y1: startY } = workAreaBox;
+        const {y1: startY} = this._workAreaBox;
         const appDisplayBox = new Clutter.ActorBox();
         const { spacing } = this;
 
@@ -135,13 +150,7 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
 
         const { spacing } = this;
 
-        const monitor = Main.layoutManager.primaryMonitor;
-        const workArea = Main.layoutManager.getWorkAreaForMonitor(monitor.index);
-        const startX = workArea.x - monitor.x;
-        const startY = workArea.y - monitor.y;
-        const workAreaBox = new Clutter.ActorBox();
-        workAreaBox.set_origin(startX, startY);
-        workAreaBox.set_size(workArea.width, workArea.height);
+        const startY = this._workAreaBox.y1;
         box.y1 += startY;
         const [width, height] = box.get_size();
         let availableHeight = height;
@@ -181,7 +190,7 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
         }
 
         // Workspaces
-        let params = [box, workAreaBox, searchHeight, dashHeight, thumbnailsHeight];
+        let params = [box, searchHeight, dashHeight, thumbnailsHeight];
         const transitionParams = this._stateAdjustment.getStateTransitionParams();
 
         // Update cached boxes
@@ -206,7 +215,7 @@ class ControlsManagerLayout extends Clutter.BoxLayout {
             const workspaceAppGridBox =
                 this._cachedWorkspaceBoxes.get(ControlsState.APP_GRID);
 
-            params = [box, workAreaBox, searchHeight, dashHeight, workspaceAppGridBox];
+            params = [box, searchHeight, dashHeight, workspaceAppGridBox];
             let appDisplayBox;
             if (!transitionParams.transitioning) {
                 appDisplayBox =